#ifndef _RENDER_OPTION_H_
#define _RENDER_OPTION_H_

class RenderOption
{
public:
	RenderOption(void);
	~RenderOption(void);
	void validate();
	bool getTraceShadows();
	void setTraceShadows(bool traceShadows);
	int getNumLightSamples();
	void setNumLightSamples(int numLightSamples);
	int getMaxDepth();
	void setMaxDepth(int maxDepth);
	bool getComputeGI();
	void setComputeGI(bool computeGI);
	bool setComputeCaustics();
	void setComputeCaustics(bool computeCaustics);
	int getNumPhotons();
	void setNumPhotons(int numPhotons);
	int getNumGather();
	void setNumGather(int numGather);
	double getPhotonReductionRatio();
	void setPhotonReductionRatio(double photonReductionRatio);
	double getIrradianceCacheTolerance();
	void setIrradianceCacheTolerance(double irradianceCacheTolerance);
	double getIrradianceCacheSpacing();
	void setIrradianceCacheSpacing(double irradianceCacheSpacing);
	int getIrradianceSamples();
	void setIrradianceSamples(int irradianceSamples);
	bool getDisplayIrradianceSamples();
	void setDisplayIrradianceSamples(bool displayIrradianceSamples);
	int getMinAASamples();
	void setMinAASamples(int minAASamples);
	int getMaxAASamples();
	void setMaxAASamples(int maxAASamples);
	double getAAThreshold();
	void setAAThreshold(double threshold);
	bool getDisplayAASamples();
	void setDisplayAASamples(bool displayAASamples);
	char* getOutputFilename();
	void setOutputFilename(char* outputFilename);

private:

	inline double max(double a, double b);

	// direct illumination
	bool		traceShadows;
	int			numLightSamples;
	int			maxDepth;

	// indirect illumination
	bool		computeGI;
	bool		computeCaustics;
	int			numPhotons;
	int			numGather;
	double		photonReductionRatio;
	double		irradianceCacheTolerance;
	double		irradianceCacheSpacing;
	int			irradianceSamples;
	bool		displayIrradianceSamples;

	// anti-aliasing
	int			minAASamples;
	int			maxAASamples;
	bool		displayAASamples;
	double		threshold;

	// image
	char*		outputFilename;

};


#endif

